function Game(dataArrayOfArray) {
    // kopiowanie tablicy
    // zapobiega tworzeniu sie referencji
    this.game = new Array();
    for (var x = 0; x < dataArrayOfArray.length; x++) {
        this.game[x] = new Array();
        for (var y = 0; y < dataArrayOfArray.length; y++) {
            this.game[x][y] = dataArrayOfArray[x][y];
        }
    }
}

Game.prototype.getValue = function(x,y) {
    if (typeof this.game[x] === 'undefined') {
        return null;
    }
    
    if (typeof this.game[x][y] === 'undefined') {
        return null;
    }
    
    return this.game[x][y];
};

Game.prototype.setValue = function(x, y, value) {
    this.game[x][y] = value;
}

Game.prototype.getSize = function() {
    return this.game.length;
};

Game.prototype.isFirstMoveForValue = function(v) {
    for (var x = 0; x < this.getSize(); x++) {
        for (var y = 0; y < this.getSize(); y++) {
            var value = this.getValue(x, y);
            if (value == v) {
                return false;
            }
        }
    }
    return true;
};

Game.prototype.hasSiblings = function(x, y, v) {
    /**
     * czy w bezposrednim poblizu jest rodzenstwo
     */
    if (this.getValue(x -1, y) == v) {
        return true;
    }
    if (this.getValue(x +1, y) == v) {
        return true;
    }
    if (this.getValue(x, y -1) == v) {
        return true;
    }
    if (this.getValue(x, y +1) == v) {
        return true;
    }
    if (this.getValue(x -1, y -1) == v) {
        return true;
    }
    if (this.getValue(x +1, y +1) == v) {
        return true;
    }
    if (this.getValue(x -1, y +1) == v) {
        return true;
    }
    if (this.getValue(x +1, y -1) == v) {
        return true;
    }

    return false;
};